﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Contract.Business.Entity;
using GenericControlsWinForm;

namespace Fast.Presentation.WinForms.Cruds
{
    public partial class FrmVendaPagamento : Form
    {
        public FrmVendaPagamento()
        {
            InitializeComponent();
        }

        public decimal valorVenda;
        public Dictionary<int, decimal> valores = null;
        public decimal valorPagamento = 0;
        List<string> pagamentosUnicos;
        public string descricaoPagamento;

        #region Eventos
        private void FrmVendaPagamento_Load(object sender, EventArgs e)
        {
            try
            {
                List<BETipoPagamento> lista = UtilidadesListas.buscarPagamentosAtivos();
                int posicaoX = 10;
                int posicaoY = 10;

                if (lista == null || lista.Count == 0)
                {
                    Utilidades.ExibirMensagem("Não foi encontrado nenhum tipo de pagamento.");
                    this.Close();
                }

                pagamentosUnicos = new List<string>();

                foreach (BETipoPagamento item in lista)
                {
                    CheckBox chk = new CheckBox();
                    chk.Name = "chk" + item.Codigo.ToString().PadLeft(5, '0');
                    chk.Text = item.Descricao;
                    chk.Location = new Point(posicaoX, posicaoY);
                    chk.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    chk.Width = 263;
                    chk.Height = 30;

                    NumberDecimalTextBox txt = new NumberDecimalTextBox();
                    txt.Name = "txt" + item.Codigo.ToString().PadLeft(5, '0');
                    txt.Text = "0,00";
                    txt.Enabled = false;
                    txt.Location = new Point(chk.Width + 30, posicaoY);
                    txt.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    txt.MaxLength = 7;
                    txt.LostFocus += new EventHandler(txt_LostFocus);

                    chk.Click += new EventHandler(chk_Click);

                    this.groupBox1.Controls.Add(chk);
                    this.groupBox1.Controls.Add(txt);

                    posicaoY += 40;

                    //Verifica se é pagamento único
                    if (item.Unico)
                        pagamentosUnicos.Add("txt" + item.Codigo.ToString().PadLeft(5, '0'));
                }

                if (valores != null)
                {
                    string nome;
                    foreach (var item in valores)
                    {
                        nome = item.Key.ToString().PadLeft(5, '0');
                        ((CheckBox)this.groupBox1.Controls["chk" + nome]).Checked = true;
                        ((TextBox)this.groupBox1.Controls["txt" + nome]).Text = item.Value.ToString("N2");
                        ((TextBox)this.groupBox1.Controls["txt" + nome]).Enabled = true;
                    }
                }

                this.Height = posicaoY + 100;
                valores = null;
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }

        void txt_LostFocus(object sender, EventArgs e)
        {
            try
            {

                TextBox txt = ((TextBox)sender);
                if (String.IsNullOrEmpty(txt.Text))
                    txt.Text = "0,00";
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }

        void chk_Click(object sender, EventArgs e)
        {
            try
            {
                CheckBox chk = ((CheckBox)sender);
                string nome = chk.Name;
                nome = nome.Replace("chk", "txt");

                //bool pagamentoComCupom = Utilidades.Configuracao().CodigoTipoPagamentoCupom == int.Parse(nome.Replace("txt", String.Empty));
                //if (!pagamentoComCupom)
                //{
                NumberDecimalTextBox txt = ((NumberDecimalTextBox)this.groupBox1.Controls[nome]);

                txt.Enabled = chk.Checked;

                if (!chk.Checked)
                    txt.Text = "0,00";
                else
                {
                    if (pagamentosUnicos.Contains(nome))
                        txt.Text = valorVenda.ToString("N2");

                    txt.Focus();
                    txt.SelectAll();
                }
                //}
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }

        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                valores = new Dictionary<int, decimal>();

                string nomeControle;
                decimal valorControle;
                valorPagamento = 0;
                int id;
                descricaoPagamento = String.Empty;
                foreach (Control item in this.groupBox1.Controls)
                {
                    if (item is CheckBox)
                    {
                        if (((CheckBox)item).Checked)
                        {
                            nomeControle = item.Name.Replace("chk", "");
                            valorControle = decimal.Parse(((TextBox)this.groupBox1.Controls["txt" + nomeControle]).Text);
                            if (valorControle > 0)
                            {
                                id = int.Parse(nomeControle);
                                valores.Add(id, valorControle);
                                valorPagamento += valorControle;
                                descricaoPagamento += item.Text + "; ";
                            }
                        }
                    }
                }

                if (descricaoPagamento.Length > 2)
                    descricaoPagamento = descricaoPagamento.Remove(descricaoPagamento.Length - 2);

                if (valorPagamento < valorVenda)
                    Utilidades.ExibirMensagem("A soma dos pagamentos deve ser maior ou igual ao valor da venda(" + valorVenda + ").");
                else
                    this.Close();
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }
        #endregion
    }
}
